home *** CD-ROM | disk | FTP | other *** search
Java Source | 1996-05-23 | 8.6 KB | 332 lines |
- // TextEditComponent.java
- // An AWT component for doing editing of simple text files, loaded via JFS
- import java.awt.*;
- import java.io.IOException;
-
- public class TextEditComponent extends JFScomponent
- {
- String text;
- Button loadb, saveb, newb, insertb, printb;
- Button searchb, replaceb, cutb, copyb, pasteb, writeb;
- Panel top, bot;
- TextArea editor;
- FileReq loadreq, savereq, insertreq, writereq;
- String writesel; // selection upon write
-
- String mtype[] = {"text/plain", "text/html", "text/sgml"};
-
- void init(java.applet.Applet a)
- {
- Color hi = new Color(220, 220, 220);
- Color lo = new Color(50, 50, 50);
- setLayout(new BorderLayout());
-
- // Create top buttons
- top = new Panel();
- top.setLayout(new GridLayout(1,4));
- top.add(loadb = new Button("Load"));
- top.add(saveb = new Button("Save"));
- top.add(insertb = new Button("Insert"));
- top.add(newb = new Button("New"));
- top.add(printb = new Button("Print"));
- add("North",top);
- top.disable();
-
- // Create text field
- editor = new TextArea();
- editor.setFont(new Font("courier", Font.PLAIN, 12));
- add("Center",editor);
- editor.disable();
-
- // Create bottom buttons
- bot = new Panel();
- bot.setLayout(new GridLayout(1,0));
- bot.add(searchb = new Button("Search"));
- bot.add(replaceb = new Button("Replace"));
- bot.add(cutb = new Button("Cut"));
- bot.add(copyb = new Button("Copy"));
- bot.add(pasteb = new Button("Paste"));
- bot.add(writeb = new Button("Write"));
- add("South",bot);
- bot.disable();
- }
-
- // connect
- // Use this client for loading and saving
- void connect(JFSclient c)
- {
- super.connect(c);
- if (editor != null) {
- top.enable();
- bot.enable();
- editor.enable();
- }
- try if (!client.canaccess("/dev/Printer", 'w')) printb.disable();
- catch(RequestException e);
- }
-
- // load
- // Load the named text file and version
- void load(String file, int ver) throws RequestException
- {
- byte fd[] = client.get(file, ver);
- if (editor != null) editor.setText(new String(fd,0));
- else text = new String(fd,0);
- client.setcurrent(file, client.statfile(file).type);
- }
-
- // insert
- // Insert the named text file into the buffer at the current selection
- void insert(String file, int ver) throws RequestException
- {
- byte fd[] = client.get(file, ver);
- editor.replaceText(new String(fd,0),
- editor.getSelectionStart(),
- editor.getSelectionEnd());
- }
-
- // wantedsize
- // How big this component would like to be.
- Dimension wantedsize()
- {
- return new Dimension(600,400);
- }
-
- // print
- // Print the current file to the given printer
- void print(String printer, String type) throws RequestException
- {
- if (!type.equals("Text"))
- throw new RequestException("Only Text printers are supported");
- String edittxt;
- if (editor != null) edittxt = editor.getText();
- else edittxt = text;
- byte fd[] = new byte[edittxt.length()];
- edittxt.getBytes(0, edittxt.length(), fd, 0);
- Message head = new Message();
- head.add("Printer", printer);
- try client.devput("/dev/Printer", fd, head);
- catch(RequestException e)
- throw new RequestException("Error writing to printer : "+
- e.getMessage());
- }
-
- // action
- // Called when a user activates some user interface component
- public boolean action(Event evt, Object obj)
- {
- if (evt.target == loadb && loadreq == null) {
- loadreq = new FileReq(client, this, "Load", "text/*",
- false, null);
- }
- else if (evt.target == saveb && savereq == null) {
- savereq = new FileReq(client, this, "Save", "text/*",
- true, mtype);
- }
- else if (evt.target == newb) {
- // clear editor window
- editor.setText("");
- }
- else if (evt.target == insertb) {
- // open insert requestor
- insertreq = new FileReq(client, this, "Insert", "text/*",
- false, mtype);
- }
- else if (evt.target == printb) {
- // open print requestor
- new PrintRequestor(this, client);
- }
- else if (evt.target == searchb) {
- // Open search requestor
- new SARrequestor(this, false);
- }
- else if (evt.target == replaceb) {
- // Open replace requestor
- new SARrequestor(this, true);
- }
- else if (evt.target == cutb) {
- // Cut selected text
- client.setbuf(editor.getSelectedText());
- editor.replaceText("",editor.getSelectionStart(),
- editor.getSelectionEnd());
- }
- else if (evt.target == copyb) {
- // Copy selected text
- client.setbuf(editor.getSelectedText());
- }
- else if (evt.target == pasteb) {
- // Paste text from cut buffer
- if (client.getbuf() instanceof String)
- editor.replaceText((String)client.getbuf(),
- editor.getSelectionStart(),
- editor.getSelectionEnd());
- }
- else if (evt.target == writeb) {
- // Save selected text
- writesel = editor.getSelectedText();
- writereq = new FileReq(client, this, "Write", "text/*",
- true, mtype);
- }
-
- else if (evt.target == loadreq) {
- if (((String)evt.arg).equals("Load")) {
- // load a file
- try load(loadreq.getfile(), loadreq.getversion());
- catch(RequestException e)
- new ErrorWindow("Could not open "+
- loadreq.getfile()+" : "+
- e.getMessage());
- }
- loadreq = null;
- }
- else if (evt.target == savereq) {
- if (((String)evt.arg).equals("Save")) {
- // save the current file
- String text = editor.getText();
- byte fd[] = new byte[text.length()];
- text.getBytes(0, text.length(), fd, 0);
- try save(fd, savereq.getfile(),
- savereq.gettype(), savereq.getversion(),
- savereq.multiversion());
- catch(RequestException e)
- new ErrorWindow("Could not save "+
- savereq.getfile()+" : "+
- e.getMessage());
- }
- savereq = null;
- }
- else if (evt.target == insertreq) {
- if (((String)evt.arg).equals("Insert")) {
- // insert a file
- try insert(insertreq.getfile(), insertreq.getversion());
- catch(RequestException e)
- new ErrorWindow("Could not open "+
- insertreq.getfile()+" : "+
- e.getMessage());
- }
- insertreq = null;
- }
- else if (evt.target == writereq) {
- if (((String)evt.arg).equals("Write")) {
- // Write out the text that was selected when
- // 'write' was clicked
- byte fd[] = new byte[writesel.length()];
- writesel.getBytes(0, writesel.length(), fd, 0);
- try save(fd, writereq.getfile(),
- writereq.gettype(), writereq.getversion(),
- writereq.multiversion());
- catch(RequestException e)
- new ErrorWindow("Could not write "+
- writereq.getfile()+" : "+
- e.getMessage());
- }
- writereq = null;
- }
- return true;
- }
- }
-
- // SARrequestor
- // A window for doing searches and possibly replaces.
- class SARrequestor extends Frame
- {
- TextEditComponent parent;
- TextField search;
- TextField replace;
- Button next, all, close;
- boolean replacemode;
-
- SARrequestor(TextEditComponent p, boolean r)
- {
- parent = p;
- replacemode = r;
- setLayout(new BorderLayout());
-
- // create search and replace text fields
- Panel wordpanel = new SpacedPanel();
- wordpanel.setLayout(new BorderLayout());
- Panel left = new Panel();
- left.setLayout(new GridLayout(0,1));
- left.add(new Label("Search"));
- if (r) left.add(new Label("Replace"));
- wordpanel.add("West",left);
- Panel right = new Panel();
- right.setLayout(new GridLayout(0,1));
- right.add(search = new TextField());
- if (r) right.add(replace = new TextField());
- wordpanel.add("Center",right);
- add("North",wordpanel);
-
- // create buttons
- Panel bot = new Panel();
- bot.setLayout(new BorderLayout());
- Panel buttonpanel = new SpacedPanel();
- buttonpanel.setLayout(new GridLayout(1,0));
- buttonpanel.add(next = new Button("Next"));
- if (r) buttonpanel.add(all = new Button("All"));
- buttonpanel.add(close = new Button("Close"));
- bot.add("East",buttonpanel);
- add("South",bot);
-
- setTitle(replacemode ? "Search and replace" : "Search");
- pack();
- show();
- }
-
- public boolean handleEvent(Event evt)
- {
- if (evt.id == Event.WINDOW_DESTROY)
- dispose();
- return super.handleEvent(evt);
- }
-
- public boolean action(Event evt, Object obj)
- {
- if (evt.target == close)
- dispose();
- else if (evt.target == next)
- searchreplace();
- else if (evt.target == all) {
- parent.editor.select(0,0);
- while(searchreplace())
- ;
- }
- return true;
- }
-
- // find (and maybe replace) the next occurance of a string after the
- // current cursor position
- boolean searchreplace()
- {
- String et = parent.editor.getText();
- int pos = parent.editor.getSelectionEnd();
- int idx = et.indexOf(search.getText(), pos);
- if (idx < 0)
- return false; // not found!
- if (replacemode) {
- // replace word, and select new one
- parent.editor.replaceText(replace.getText(), idx,
- idx+search.getText().length());
- parent.editor.requestFocus();
- parent.editor.select(idx, idx+replace.getText().length());
- }
- else {
- // just select word
- parent.editor.requestFocus();
- parent.editor.select(idx, idx+search.getText().length());
- }
- return true;
- }
-
- public Dimension minimumSize()
- {
- return new Dimension(250, replacemode ? 140 : 110);
- }
-
- public Dimension preferredSize()
- {
- return minimumSize();
- }
- }
-
-